const mongoose = require('mongoose')
const {
	type
} = require('os')
mongoose.connect('mongodb://127.0.0.1:27017/bilibili')

mongoose.connection.once('open', () => {

	console.log('连接打开')
	//1、创建文档的结构对象
	let bookSchema = new mongoose.Schema({
		name: {
			type: String,
			require: true,
			unique: true //是否是唯一值
		},
		author: {
			type: String,
			enum: ['吴承恩', '张三', '罗贯中', '曹雪芹'] //该类型为枚举，只能为这几个值
		},
		price: {
			type: Number,
			default: 40 //默认值
		},
		is_hot: Boolean,
		characters: Array,
		pub_time: Date,
		test: mongoose.Schema.Types.Mixed, //任何类型
		outerId: mongoose.Schema.Types.ObjectId, //ID类型，可以用来存储其他集合中的ID作为外键
		weight: mongoose.Schema.Types.Decimal128 //高精度数字
	})
	//2、创建模型对象，用于对文档进行直接操作
	let bookModel = mongoose.model('books', bookSchema)
	//增加
	// bookModel.create({
	// 	name: '龙族',
	// 	author: '张三',
	// 	is_hot: true,
	// 	characters: ['刘备', '关羽', '张飞'],
	// 	pub_time: new Date(),
	// 	test: {
	// 		name: '李四'
	// 	},
	// }).then((data => {
	// 	console.log(data)
	// }))
	//删除
	// bookModel.deleteOne({ //删除一条数据，可以用deleteMany函数删除所有符合条件的数据
	// 	author: '张三'
	// }).then(data => {
	// 	console.log(data)
	// }, err => console.log(err))
	//修改
	// bookModel.updateOne({ //修改一条数据，可以用updateMany函数修改所有符合条件的数据
	// 	name: '西游记'
	// }, {
	// 	price: 100
	// }).then(data => {
	// 	console.log(data)
	// }, err => console.log(err))
	//查找,方法：find、findById、findOne、findMany
	// bookModel.find().then(data => console.log(data))
	// bookModel.findById('68d14b3d1156c0811250e45c').then(data => console.log(data))
	//条件匹配
	// bookModel.find({
	// 	price: {
	// 		$lt: 60//表示价格小于60的
	// 	}
	// }).then(data => console.log(data))

	//两组条件，或运算
	// bookModel.find({
	// 	$or: [{
	// 		author: '张三'
	// 	}, {
	// 		price: 100
	// 	}]
	// }).then(data => console.log(data))

	//多组条件，同时满足
	// bookModel.find({
	// 	$and: [{
	// 		author: '张三'
	// 	}, {
	// 		price: {
	// 			$lt: 60
	// 		}
	// 	}]
	// }).then(data => console.log(data))

	//选择性读取，只显示读取的文档（行 ）的某些字段
	// bookModel.find().select({
	// 	name: 1,
	// 	author: 1,
	// 	// _id: 0//默认还是会显示_id，如果确实不想要的话，可以将其指定为0
	// }).exec().then(data => {
	// 	console.log(data)
	// }, err => console.log(err))
	//数据排序
	// bookModel.find().select({
	// 	name: 1,
	// 	price: 1,
	// 	_id: 0
	// }).sort({
	// 	price: 1 //1表示递增，-1表示递减
	// }).exec().then(data => {
	// 	console.log(data)
	// }, err => console.log(err))
	//跳过和截取特定记录：skip和limit
	bookModel.find().select({
		name: 1,
		price: 1,
		_id: 0
	}).sort({
		price: 1 //1表示递增，-1表示递减
	}).skip(1).limit(2).exec().then(data => {
		console.log(data)
	}, err => console.log(err))


})
mongoose.connection.on('error', () => {
	console.log('连接失败')
})
mongoose.connection.on('close', () => {
	console.log('连接断开')
})

// setTimeout(() => {
// 	mongoose.disconnect()
// }, 2000);